import axios from "axios";
import {getTokenName, messageConfirm, messageTip, removeToken} from "../util/Util.js";

//定义后端接口地址的前缀
axios.defaults.baseURL="http://localhost:8080";
export function doGet(url,params){
   return axios({
       method:"get",
       url:url,
       params:params,//{name:'lily',age:67}
       dataType:"json"
   })
}

export function doDelete(url,params){
    axios({
        method:"delete",
        url:url,
        params:params,
        dataType:"json"
    })
}

export function doPost(url,data){
     return axios({
        method:"post",
        url:url,
        data:data,
        dataType:"json"
    })
}

export function doPut(url,data){
    return axios({
        method:"put",
        url:url,
        data:data,
        dataType:"json"
    })
}

//添加axios请求拦截器,形参是两个箭头函数
axios.interceptors.request.use((config)=>{
    //在发送请求之前做些什么,在请求头中放一个token(jwt),传给后端接口
    let token=window.sessionStorage.getItem(getTokenName())
    if(!token){//token（jwt）不存在,是空的
        token=window.localStorage.getItem(getTokenName())
        if(token){//如果localStorage里面token有值
            config.headers['rememberMe']=true;//放到请求头
        }
    }
    if(token){
        config.headers['Authorization']=token;//放到请求头
    }
    return config;
},(error)=>{
    //对请求错误做些什么
    return Promise.reject(error);
    }
);

//添加响应拦截器
axios.interceptors.response.use((response)=>{
    //对响应结果做点什么，拦截token验证的结果，进行相应的提示和页面跳转
    if(response.data.code>900){//token验证未通过
        //给前端用户提示，并且跳转页面
        messageConfirm(response.data.msg+",是否重新去登录")
            .then(() => {//用户点击确定按钮会触发then函数
                //后端验证token没有通过的情况下，要把前端的token删掉
                removeToken();
                //跳转到登录页
                window.location.href="/";
            })
            .catch(() => {//用户点击取消按钮会触发
               messageTip("取消去登录","warning");
            })
        return ;
    }
    return response;
},function (error){
    return Promise.reject(error);
});
